"""
Python类中自带的方法
"""
class Student:

    def __init__(self, name, age):
        self.name = name
        self.age = age


    def speak(self):
        print(f'大家好,我叫{self.name},今年{self.age}岁了')

    # 重写 __str__ 打印对象的时候自动调用
    # def __str__(self):
    #     return f'Student(name={self.name},age={self.age})'

    def __repr__(self):
        # return self.__str__()
        return f'Student(name={self.name},age={self.age})'

    def __call__(self,*args,**kwargs):
        print('call方法被调用了')
        fn = kwargs['fn']
        return fn(args[0],args[1],args[2])

if __name__ == '__main__':
    s = Student('聂茹凤', 18)

    n = s(1,2,3,fn=lambda x,y,z: x + y + z)
    print(n)


    # print(s)

    # s2 = Student('谭新宇', 18)
    # s3 = Student('刘千琪', 18)
    # s4 = Student('韩耀祖', 18)
    #
    # # print(s2)
    #
    # s_list = list() # 创建一个集合对象
    # s_list.append(s)
    # s_list.append(s2)
    # s_list.append(s3)
    # s_list.append(s4)

    # 当打印一个对象的时候会默认调用 __str__或者__repr__
    # 魔法方法不需要我们调用
    # for stu in s_list:
    #     print(stu)
    #
    # print('==============')
    # print(s_list)


    # 也可以手动调用魔法方法
    # print(s.__repr__())
    # print(repr(s))


    #s() # 输出call方法被调用了 对象可以直接被调用